package com.example.k8s.hello.boot.oss.template;

import com.example.k8s.hello.boot.oss.ObjectStat;

import java.io.InputStream;
import java.util.List;

/**
 * 存储服务接口
 */
public interface OssTemplate {

    /**
     * 判断分组是否存在
     *
     * @param bucket
     * @return
     */
    boolean bucketExists(String bucket);

    /**
     * 创建图片分组
     *
     * @param bucket
     * @return
     */
    void createBucket(String bucket);

    /**
     * 删除图片分组
     *
     * @param bucket
     * @return
     */
    void deleteBucket(String bucket);

    /**
     * 根据存储对象名称和存储桶名称获取存储对象
     *
     * @param name   存储对象名称
     * @param bucket 存储桶名称
     * @return 存储对象
     */
    InputStream getObject(String name, String bucket);

    /**
     * 获取文件信息
     *
     * @param name
     * @param bucket
     * @return
     */
    ObjectStat getObjectStat(String name, String bucket);

    /**
     * 把待存储对象流数据根据指定的存储对象名称和指定的存储桶名称存储
     *
     * @param is     待存储对象流数据
     * @param name   存储对象名
     * @param bucket 存储桶名称
     * @return 存储位置
     */
    void putObject(InputStream is, String name, String bucket);

    /**
     * 根据存储对象名称和存储桶名称删除存储对象
     *
     * @param name   存储对象名称
     * @param bucket 存储桶名称
     */
    void deleteObject(String name, String bucket);

    /**
     * 获取所有桶
     *
     * @return
     */
    List<String> listBuckets();

    /**
     * 列出所有桶中图片
     *
     * @param bucket 存储桶名称
     * @return
     */
    List<String> listObjects(String bucket);

    /**
     * 批量删除
     *
     * @return
     */
    void deleteObjects(String bucket, List<String> objects);
}
